#!/bin/bash

# 检查是否提供了应用名称参数
if [ "$#" -ne 1 ]; then
    echo "用法: $0 <app_name>"
    exit 1
fi

# 获取应用名称
APP_NAME=$1

# 获取脚本所在目录
script_dir=$(cd "$(dirname "$0")" && pwd)

# SQL 文件路径
SQL_FILES=("snail_job.sql" "ry_vue_5.X.sql" "flowable.sql" "syncSql.sql" "menu.sql")

# MySQL 密码，可以通过环境变量设置，默认为 123456
MYSQL_PASSWORD="${MYSQL_PASSWORD:-123456}"

# 清理旧容器和镜像
clean() {
    # 删除容器和镜像
    docker ps -a | grep -q "${APP_NAME}_admin" && docker rm -f "${APP_NAME}_admin" 2>/dev/null
    docker images | grep -q "${APP_NAME}_admin" && docker rmi "${APP_NAME}_admin" 2>/dev/null
    docker ps -a | grep -q "${APP_NAME}_web" && docker rm -f "${APP_NAME}_web" 2>/dev/null
    docker images | grep -q "${APP_NAME}_web" && docker rmi "${APP_NAME}_web" 2>/dev/null

    docker ps -a | grep -q "${APP_NAME}_redis" && docker rm -f "${APP_NAME}_redis" 2>/dev/null

    # 删除数据库
    docker exec -i "icss_mysql" mysql -uroot -p"$MYSQL_PASSWORD" --default-character-set=utf8 -e "DROP DATABASE IF EXISTS ${APP_NAME}_data;"
    rm -f "/etc/nginx/conf.d/${APP_NAME}.conf"       2>/dev/null

    echo "清理完成"
}

# 调用清理函数
clean

# 删除并重建数据库
docker exec -i "icss_mysql" mysql -uroot -p"$MYSQL_PASSWORD" --default-character-set=utf8 -e "
DROP DATABASE IF EXISTS ${APP_NAME}_data;
CREATE DATABASE ${APP_NAME}_data;
"

# 执行多个 SQL 脚本
for SQL_FILE in "${SQL_FILES[@]}"; do
    # 检查 SQL 文件是否存在
    if [ ! -f "${script_dir}/${SQL_FILE}" ]; then
        echo "SQL 文件 '$SQL_FILE' 不存在"
        clean
        exit 1
    fi

    # 执行 SQL 脚本
    if docker exec -i "icss_mysql" mysql -uroot -p"$MYSQL_PASSWORD" --default-character-set=utf8 "${APP_NAME}_data" < "${script_dir}/${SQL_FILE}"; then
        echo "SQL 脚本 '$SQL_FILE' 执行成功"
    else
        echo "执行 SQL 脚本 '$SQL_FILE' 失败"
        clean
        exit 1
    fi
done


# 运行 Redis 容器
if docker run -d \
    --name "${APP_NAME}_redis" \
    --network icss_network \
    redis:latest; then
    echo "Redis 容器已启动！"
else
    echo "Redis 容器启动失败"
    clean
    exit 1
fi


# 构建并运行 admin 容器
docker build -t "${APP_NAME}_admin" "${script_dir}/app" || { echo "构建 ${APP_NAME}_admin 镜像失败"; clean; exit 1; }

if docker run -d \
    --name "${APP_NAME}_admin" \
    --network icss_network \
    -v ~/.m2/repository:/root/.m2/repository \
    --memory="512m" --cpus="1" \
    "${APP_NAME}_admin"; then
    echo "xm_admin容器已启动！"
else
    echo "xm_admin容器启动失败"
    clean
    exit 1
fi

# 构建并运行 web 容器
docker build -t "${APP_NAME}_web" "${script_dir}/web" || { echo "构建 ${APP_NAME}_web 镜像失败"; clean; exit 1; }

if docker run -d \
    --name "${APP_NAME}_web" \
    --network icss_network \
    -v ~/.store:/root/.store \
    --memory="512m" --cpus="1" \
    "${APP_NAME}_web"; then
    echo "xm_web容器已启动！"
else
    echo "xm_web容器启动失败"
    clean
    exit 1
fi

